package main

import (
	"fmt"
)

/**
执行用时：0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗：2 MB, 在所有 Go 提交中击败了28.56%的用户
 */
func isValid(s string) bool {

	stk := make([]rune, 0)  // type rune = int32
	for _, c := range s {
		if c == '(' || c == '[' || c == '{' {
			stk = append(stk, c)
		} else {
			if len(stk) > 0 && abs(stk[len(stk) - 1] - c) <= 2 {
				stk = stk[:len(stk) - 1]
			} else {
				return false
			}
		}
	}
	return len(stk) == 0
}

// 求绝对值
func abs(a int32) int32 {
	if a < 0 { a = -a }
	return a
}

func main() {

	fmt.Println(isValid("[()]{}"))  // true
}
